﻿// 707 离散化.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <unordered_map>
#include <map>
#include <algorithm>
#include <memory.h>


using namespace std;
/*
http://oj.daimayuan.top/course/22/problem/896

给你n个数a1,a2,…,an。

输出离散化之后的结果，也就是对于每个ai，输出它是去重之后第几小的。

输入格式
第一行一个整数n(1≤n≤105)。

接下来一行n
个整数a1,a2,…,an(1≤ai≤109)。

输出格式
输出一行n个整数。

样例输入
5
5 3 5 2 5
样例输出
3 2 3 1 3

5 
5 5 5 5 5 
*/

unordered_map<int, int> mm;
const int N = 100010;
int a[N];
int cpy[N];
int n;
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}

	memcpy(cpy,a,sizeof cpy);
	sort(cpy,cpy+n);

	int l = -1; int r = 0;
	while (l < n && r < n) {
		if (l == -1) {
			l++; cpy[l] = cpy[r];
		}
		else {
			while (r < n && cpy[r] == cpy[l]) { r++; }
			if (r < n) {
				l++; cpy[l] = cpy[r];
			}
		}
	}

	for (int i = 0; i <= l; i++) {
		mm[cpy[i]] = i+1;
	}

	for (int i = 0; i < n; i++) {
		cout << mm[a[i]] << " ";
	}

	return 0;
}

 